Acquisition des donnes
-----------------------

Les donnes ne sont pas  proprement parler de donnes, puisquil ne sagit pas de valeurs numrises, mais dun signal dhorloge dont la frquence est variable. Cest prcisment grce  ce  format  dinformation que lacquisition peut tre simplifie  lextrme. Prenons un exemple pour claircir la chose.

Imaginons que le signal dhorloge  lire possde une frquence de 200Hz. La ligne dentre DCD du port srie va donc passer alternativement du niveau 12V au niveau +12V,  un rythme de 400 fois par seconde (200 fronts descendants plus 200 fronts montants). Le logiciel va effectuer une mesure pendant une dure de 1s, dure pendant laquelle il va comptabiliser le nombre de changements survenus sur la ligne DCD (cest le principe de base adopt pour la ralisation de nombre de compteurs ou frquencemtres). Dans notre exemple, le comptage va donner le nombre 400. Cette valeur est directement exploitable pour son affichage, et ne ncessite aucun traitement particulier, si ce nest la division par deux de la valeur obtenue pour avoir la valeur de la frquence et non plus le nombre des fronts descendants et montants. Ce nest pas plus compliqu. Voyons maintenant comment seffectue le comptage, en analysant chaque portion du code source ddi  lacquisition (procedure TfmMain.ReadData dans le fichier frmMain).

Com_GetDCD est la fonction qui va permettre de lire ltat de lentre DCD. Cette fonction ne comprend quune seule ligne de code, grace  lemploi du composant apdComPort (voir remarque importante concernant ce composant un peu plus loin). Sans ce composant, nous aurions pu utiliser une fonction base sur du code assembleur pour lire ltat de la ligne DCD et la stocker dans la variable Data, mais cette faon de faire peut chouer sous Windows NT (du fait dune plus grande rigueur du systme dexploitation concernant les accs en mmoire, quand il ne sagit pas tout simplement dune restriction des droits dutilisateur).

iActualState et iOldState sont deux variables qui sont utilises pour stocker deux tats conscutifs de lentre DCD, et qui permettent de dterminer quand ltat de lentre de mesure change (quand lentre passe de ltat bas  ltat haut et inversement).

iInterval est une constante qui spcifie lintervalle de temps qui doit sparer chaque mesure (interval de 1 seconde dans le cas prsent). Cette constante est associe  lutilisation des variables T0 et T1.

T0 et T1 sont des variables qui permettent de connatre lintervalle de temps coul depuis le dbut de la mesure ou depuis la dernire mesure effectue. Ces deux variables sont utilises avec la fonction GetTickCount qui est une fonction de Windows (prcisment contenue dans kernel32 pour les connaisseurs), et qui permet de connatre le nombre de millisecondes coules depuis le dmarrage de Windows. Si par exemple on appelle la fonction GetTickCount 1h20 aprs le dmarrage de Windows, la valeur obtenue est 4800000 (80 min x 60 sec x 1000). Si on appelle cette mme fonction 50ms plut tard, la valeur obtenue sera 4800050. Le principe retenu est donc lutilisation en boucle de cette fonction, afin de dterminer prcisment quand lintervalle de temps atteint la valeur de la constante iInterval (1000ms). Une fois cet intervalle atteint, on regarde le nombre de fois que lentre de mesure a chang dtat (cette valeur est contenue dans la variable iEdgeCount), on laffiche dans le graphe aprs lavoir divise par deux, et on donne  la variable T0 une valeur gale  la valeur de T1 pour commencer une nouvelle mesure.

iEdgeCount est une variable qui permet de stocker le nombre de transitions (fronts montants et descendant) ayant lieu sur la ligne DCD du port srie.

iFreq est une variable qui permet de stocker la valeur de la frquence, cette valeur est gale  la moiti de la valeur stocke dans la variable iEdgeCount.

Graph_AddNewValue(xxx) est la procdure qui permet dajouter  la courbe du graphe, la dernire valeur de frquence mesure. Cette procdure assure dune part le dcalage dun cran des valeurs existantes, la suppression de la valeur la plus ancienne, puis lajout de la valeur la plus rcente. Cette faon de faire permet de conserver un nombre de points constant et dobtenir un trac mobile, avec la valeur la plus rcente toujours  droite.

BStopRequest est une variable de type boolean dont la valeur passe  TRUE quand lutilisateur clique sur le bouton Arrter. A cet instant, la boucle de lecture Repeat..Until prend fin.


Remarques concernant l'utilisation de composants VCL tiers
----------------------------------------------------------

Le logiciel prsent ici fait appel  des composants VCL tiers, cest  dire qui ne sont pas inclus dans les versions commerciales de Delphi. Ces composants sont les suivants :
- ApdComPort, qui fait partie de la suite AsyncPro (socit TurboPower), et qui est utilis pour la gestion du port srie. Lauteur aurait pu se passer de ce composant pour la prsente ralisation, mais le nombre de systmes dexploitation supports aurait t moindre (laccs direct au port par des routines assembleurs utilises avec succs dans les anciens systmes dexploitation peuvent poser certains problmes sous NT ou XP, et se traduire par laffichage de messages derreur de type "Opration illgale").
- buThread, qui fait partie de la suite buPack livre avec certaines versions de Delphi (notemment la V5 pro). Ce composant peut sans risque tre remplac par le composant jvThread, qui fait partie du pack JVCL Jedi. Ce composant (buThread ou jvThread, peu importe) permet deffectuer lacquisition sans quelle soit perturbe par les manipulations de lutilisateur (droulement dun menu, dplacement ou agrandissement de la fenetre, etc). 
Si le logiciel, livr tel quel, vous convient, nul besoin dacqurir et dinstaller ces composants tiers, ils ne sont absolument pas ncessaires pour permettre lexcution du logiciel.

Pour votre usage personnel, sachez que AsyncPro et JVCL (Jedi) sont aujourdhui tous deux disponibles en Open Source (freeware avec sources), et que vous pouvez les tlcharger sur le site Internet SourceForge. Avec ces composants, vous pourrez modifiez le code source de lapplication Detecteur de mensonges et la recompiler sans difficults. Prenez cependant bien note des conditions dutilisation concernant ces composants logiciels si vous dcidez de les utiliser, car mme sils sont gratuits, vous devez absolument connatre les restrictions lies  leur usage (une habitude  prendre avec tous les logiciels).


